﻿namespace PlaylistCopy.Contract
{
    using System;

    public interface ILogger
    {
        /// <summary>
        /// Logs with error log level.
        /// </summary>
        /// <param name="message">The message to format.</param>
        /// <param name="args">The arguments.</param>
        void Error(string message, params object[] args);

        /// <summary>
        /// Logs error with exception details
        /// </summary>
        /// <param name="message">The message.</param>
        /// <param name="exception">The exception.</param>
        void ErrorException(string message, Exception exception);
        /// <summary>
        /// Logs error with exception details
        /// </summary>
        /// <param name="exception">The exception.</param>
        /// <param name="message">The message format.</param>
        /// <param name="args">The arguments to use as format arguemnts.</param>
        void ErrorException(Exception exception, string message, params object[] args);

        /// <summary>
        /// Logs with Warning log level.
        /// </summary>
        /// <param name="message">The message to format.</param>
        /// <param name="args">The arguments.</param>
        void Warning(string message, params object[] args);

        /// <summary>
        /// Logs Warning with exception details
        /// </summary>
        /// <param name="message">The message.</param>
        /// <param name="exception">The exception.</param>
        void WarningException(string message, Exception exception);

        /// <summary>
        /// Logs Warning with exception details
        /// </summary>
        /// <param name="exception">The exception.</param>
        /// <param name="message">The message format.</param>
        /// <param name="args">The arguments to use as format arguemnts.</param>
        void WarningException(Exception exception, string message, params object[] args);

        /// <summary>
        /// Logs with Info log level.
        /// </summary>
        /// <param name="message">The message to format.</param>
        /// <param name="args">The arguments.</param>
        void Info(string message, params object[] args);

        /// <summary>
        /// Logs info with exception details
        /// </summary>
        /// <param name="message">The message.</param>
        /// <param name="exception">The exception.</param>
        void InfoException(string message, Exception exception);

        /// <summary>
        /// Logs info with exception details
        /// </summary>
        /// <param name="exception">The exception.</param>
        /// <param name="message">The message format.</param>
        /// <param name="args">The arguments to use as format arguemnts.</param>
        void InfoException(Exception exception, string message, params object[] args);
    }
}
